<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
          借用构造函数继承其实不是真正的继承，只是一种复用而已
          子类复用父类的构造函数来赋值，类似于Java中的super()调用父类构造方法一样
        */

        function Super(name,age){
            console.log(this);
            this.name =name;
            this.age =age;
        }

        
        function Sub(name,age,score){
            /* 下面的代码相当于：
              this.name =name;
              this.age =age;
            */

            /* 注意这里只能使用call这种方式来调用，不能使用Super()
            
            */
           // Super.call(this,name,score);

           /* 
             Super(name,age);
             不能这样写，在函数内部调用一个函数，那么这个函数的调用者其实不是当前的函数对象而是window

             this.Super(name,age)
             也不能这样写，this.调用的是该函数对象的方法，但是Super不是函数对象的方法

             所以现在我们要调用父类的方法又要保证方法的调用者是Sub对象
            */
             Super.call(this,name,age);  //这里的函数调用者是this 即新创建出来的对象
             this.score = score;
        }


        var sub = new Sub("Alice",18,100);
        console.log(sub);







    </script>
</body>
</html>